Yii 依賴類別自動載入機制來定位和包含所有需要的類別檔案。它提供了一個高效能的類別自動載入器,符合 PSR-4 標準。當您包含 Yii.php
檔案時,會安裝自動載入器。
注意:為了描述的簡潔性,在本節中我們將僅討論類別的自動載入。但是,請記住,我們在此處描述的內容也適用於介面和 Trait 的自動載入。
為了使用 Yii 類別自動載入器,在建立和命名您的類別時,您應該遵循兩個簡單的規則
foo\bar\MyClass
)// $className is a fully qualified class name without the leading backslash
$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');
例如,如果類別名稱和命名空間是 foo\bar\MyClass
,則對應的類別檔案路徑的別名將是 @foo/bar/MyClass.php
。為了使此別名可解析為檔案路徑,@foo
或 @foo/bar
必須是根別名。
當使用基本專案範本時,您可以將您的類別放在頂層命名空間 app
下,以便 Yii 可以自動載入它們,而無需定義新的別名。這是因為 @app
是一個預定義別名,並且像 app\components\MyClass
這樣的類別名稱可以根據剛剛描述的演算法解析為類別檔案 AppBasePath/components/MyClass.php
。
在 進階專案範本 中,每個層級都有自己的根別名。例如,前端層級有一個根別名 @frontend
,而後端層級根別名是 @backend
。因此,您可以將前端類別放在命名空間 frontend
下,而將後端類別放在 backend
下。這將允許 Yii 自動載入器自動載入這些類別。
要將自訂命名空間添加到自動載入器,您需要使用 Yii::setAlias() 為命名空間的基礎目錄定義一個別名。例如,要載入位於 path/to/foo
目錄中 foo
命名空間中的類別,您將呼叫 Yii::setAlias('@foo', 'path/to/foo')
。
Yii 類別自動載入器支援類別映射功能,該功能將類別名稱映射到對應的類別檔案路徑。當自動載入器載入類別時,它將首先檢查是否在映射中找到該類別。如果是,則將直接包含對應的檔案路徑,而無需進一步檢查。這使得類別自動載入超級快速。實際上,所有核心 Yii 類別都是以這種方式自動載入的。
您可以使用以下方式將類別添加到類別映射中,該映射儲存在 Yii::$classMap
中
Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';
別名可用於指定類別檔案路徑。您應該在啟動引導過程中設定類別映射,以便在您的類別被使用之前映射已準備就緒。
由於 Yii 採用 Composer 作為套件依賴管理器,因此建議您也安裝 Composer 自動載入器。如果您正在使用具有自己自動載入器的第三方程式庫,您也應該安裝這些自動載入器。
當將 Yii 自動載入器與其他自動載入器一起使用時,您應該在安裝完所有其他自動載入器之後包含 Yii.php
檔案。這將使 Yii 自動載入器成為第一個回應任何類別自動載入請求的自動載入器。例如,以下程式碼是從進入腳本的基本專案範本中提取的。第一行安裝 Composer 自動載入器,而第二行安裝 Yii 自動載入器
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
您可以單獨使用 Composer 自動載入器,而無需 Yii 自動載入器。但是,這樣做可能會降低您的類別自動載入效能,並且您必須遵循 Composer 設定的規則,才能使您的類別可自動載入。
資訊:如果您不想使用 Yii 自動載入器,則必須建立您自己的
Yii.php
檔案版本,並將其包含在您的進入腳本中。
Yii 自動載入器能夠自動載入擴展類別。唯一的要求是擴展在其 composer.json
檔案中正確指定 autoload
區段。有關指定 autoload
的更多詳細資訊,請參閱 Composer 文件。
如果您不使用 Yii 自動載入器,Composer 自動載入器仍然可以為您自動載入擴展類別。
發現錯字或您認為此頁面需要改進?
在 Github 上編輯 !
註冊 或 登入 以發表評論。